Programmable ICs are user configurable and capable of implementing digital logic operations. There are several types of programmable ICs, including Complex Programmable Logic Devices (CPLDs) and Field Programmable Gate Arrays (FPGAs), for example. CPLDs include function blocks based on programmable logic array (PLA) architecture and programmable interconnect lines to route and transmit signals between the function blocks. FPGAs include configurable logic blocks (CLBs), input output blocks (IOBs), and programmable interconnect lines that route and transmit signals between the CLBs, between the CLBs and IOBs, and between the IOBs. Each CLB includes look-up tables and other configurable circuitry that are programmable to implement logic functions. The function blocks of CPLDs, CLBs of FPGAs, and interconnect lines are configured by data stored in a configuration memory of the respective devices.
The programmable interconnects and programmable logic are typically programmed by loading a set of configuration data (referred to as a configuration data stream) into internal configuration memory cells that define how the programmable elements are configured. Electronic devices implemented using a programmable IC often include a non-volatile memory that is used to store a configuration data stream. Traditionally, an entire configuration data stream for complete configuration of a programmable IC is retrieved from the non-volatile memory via a configuration port when the programmable IC is powered on. However, due to the large number of programmable resources included in current programmable ICs, the amount of time needed for retrieval of configuration data using the configuration port may be prohibitively long for many applications.